/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador_full;
import java.util.Hashtable;
/**
 *
 * @author Jomas Tutorial
 */
public class Functions_compilator {

    // Adiciona de /n para <br>
    public String RaddNBr (String str) {
        String retorna = str+"<br>";
        return retorna;
    }
    // Imprime com <br> varrendo em todo texto
    public String printBr (String str) {
     // vars
     String retorna = "";
     int cont = 1;
     // pinta primeiro a linha
     retorna += addSupGray((cont++)+"| &nbsp;&nbsp;&nbsp;&nbsp;");
     // varre por todo o texto selecionado
         for (int i = 0; i < str.length(); i++)
            // verifica se é um caracter de <br>
            if ((str.charAt(i) == 13 || str.equals("\n")) && cont < 10) 
                retorna += "<br>"+addSupGray((cont++)+"| &nbsp;&nbsp;&nbsp;");
            else if ((str.charAt(i) == 13 || str.equals("\n")) && cont >= 10) 
                retorna += "<br>"+addSupGray((cont++)+"|&nbsp;&nbsp;");
            else
                retorna += str.charAt(i);
        // retorna
        return retorna;
    }
    
    // Adicionar Bold
    public String addBold (String str) {
        String retorna = "<b>"+str+"</b>";
        return retorna;
    }
    // Adiciona cor Green
    public String addGreen (String str) {
        String retorna = "<font color='#006400'>"+str+"</font>";
        return retorna;
    }
    // Adiciona cor Red
    public String addRed (String str) {
        String retorna = "<font color='#CD0000'>"+str+"</font>";
        return retorna;
    }
    // Adiciona cor Yellow
    public String addYellow (String str) {
        String retorna = "<font color='#8B6914'>"+str+"</font>";
        return retorna;
    }
    // Adiciona cor Blue
    public String addBlue (String str) {
        String retorna = "<font color='#009ACD'>"+str+"</font>";
        return retorna;
    }
    // Adiciona cor Purple
    public String addPurple (String str) {
        String retorna = "<font color='#8B008B'>"+str+"</font>";
        return retorna;
    }
    // Adiciona cor Cinza
    public String addGray (String str) {
        String retorna = "<font color='#696969'>"+str+"</font>";
        return retorna;
    }
    // Adiciona cor Cinza Super
    public String addSupGray (String str) {
        String retorna = "<font color='#DCDCDC'>"+str+"</font>";
        return retorna;
    }
    
    // hash para as letras
    public Hashtable<String, Integer> letra = new Hashtable<String, Integer>();
    // hash para as números
    public Hashtable<String, Integer> digito = new Hashtable<String, Integer>();
    // hash para os operadores
    public Hashtable<String, Integer> operador = new Hashtable<String, Integer>();
    // hash para delimitadores
    public Hashtable<String, Integer> delimitador = new Hashtable<String, Integer>();
    // hash para os keywords
    public Hashtable<String, Integer> palavra = new Hashtable<String, Integer>();
    
    // insere na hash
    public void HashPut () {
        
        // Preenche Hash para as letras
        letra.put("a", 1);  
        letra.put("b", 2);
        letra.put("c", 3);
        letra.put("d", 4);
        letra.put("e", 5);
        letra.put("f", 6);
        letra.put("g", 7);
        letra.put("h", 8);
        letra.put("i", 9);
        letra.put("j", 10);
        letra.put("l", 11);
        letra.put("k", 12);
        letra.put("m", 13);
        letra.put("n", 14);
        letra.put("o", 15);
        letra.put("p", 16);
        letra.put("q", 17);
        letra.put("r", 18);
        letra.put("s", 19);
        letra.put("t", 20);
        letra.put("u", 21);
        letra.put("v", 22);
        letra.put("x", 23);
        letra.put("y", 24);
        letra.put("w", 25);
        letra.put("z", 26);
        // maiusculas
        letra.put("A", 27);  
        letra.put("B", 28);
        letra.put("C", 29);
        letra.put("D", 30);
        letra.put("E", 31);
        letra.put("F", 32);
        letra.put("G", 33);
        letra.put("H", 34);
        letra.put("I", 35);
        letra.put("J", 36);
        letra.put("L", 37);
        letra.put("K", 38);
        letra.put("M", 39);
        letra.put("N", 40);
        letra.put("O", 41);
        letra.put("P", 42);
        letra.put("Q", 43);
        letra.put("R", 44);
        letra.put("S", 45);
        letra.put("T", 46);
        letra.put("U", 47);
        letra.put("V", 48);
        letra.put("X", 49);
        letra.put("Y", 50);
        letra.put("W", 51);
        letra.put("Z", 52);
        
        // preenche a hash para números
        digito.put("1", 1);
        digito.put("2", 2);
        digito.put("3", 3);
        digito.put("4", 4);
        digito.put("5", 5);
        digito.put("6", 6);
        digito.put("7", 7);
        digito.put("8", 8);
        digito.put("9", 9);
        digito.put("0", 0);
        
        // preenche a hash dos operadores
        operador.put("+", 1);  
        operador.put("-", 2);
        operador.put("*", 3);
        operador.put("/", 4);
        operador.put("==", 5);
        operador.put("!=", 6);
        operador.put(">", 7);
        operador.put(">=", 8);
        operador.put("<", 9);
        operador.put("<=", 10);
        operador.put("&&", 11);
        operador.put("||", 12);
        operador.put("=", 13);
        operador.put("++", 14);
        operador.put("--", 15);
        operador.put(".", 16);
        operador.put("&", 17);
        operador.put("->", 18);
        operador.put("\"", 19);
        operador.put("&", 20);
        

        // preenche a tabela dos delimitadores
        delimitador.put(";", 1);  
        delimitador.put("(", 2);
        delimitador.put(")", 3);
        delimitador.put("{", 4);
        delimitador.put("}", 5);
        delimitador.put("[", 6);
        delimitador.put("]", 7);
        delimitador.put(",", 8);
        //delimitador.put("<", 8);
        //delimitador.put(">", 9);
        
        // preenche a tabela das palavras reservadas
        palavra.put("include", 1);  
        palavra.put("const", 2);
        palavra.put("struct", 3);
        palavra.put("typedef", 4);
        palavra.put("function", 5);
        palavra.put("return", 6);
        palavra.put("void", 7);
        palavra.put("main", 8);
        palavra.put("if", 9);
        palavra.put("else", 10);
        palavra.put("while", 11);
        palavra.put("for", 12);
        palavra.put("do", 13);
        palavra.put("scanf", 14);
        palavra.put("printf", 15);
        palavra.put("char", 16);
        palavra.put("int", 17);
        palavra.put("float", 18);
        palavra.put("boolean", 19);
        palavra.put("true", 20);
        palavra.put("false", 21);
    }
}
